home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / RCS / net.h,v < prev    next >
Encoding:
Text File  |  1992-08-26  |  15.1 KB  |  654 lines

  1. head     1.12;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.10.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.12
  10. date     92.08.05.16.33.46;  author jhh;  state Exp;
  11. branches ;
  12. next     1.11;
  13.  
  14. 1.11
  15. date     92.01.10.14.29.42;  author voelker;  state Exp;
  16. branches ;
  17. next     1.10;
  18.  
  19. 1.10
  20. date     90.10.19.15.50.56;  author jhh;  state Exp;
  21. branches 1.10.1.1;
  22. next     1.9;
  23.  
  24. 1.9
  25. date     90.09.11.14.40.13;  author kupfer;  state Exp;
  26. branches ;
  27. next     1.8;
  28.  
  29. 1.8
  30. date     90.06.21.12.48.49;  author jhh;  state Exp;
  31. branches ;
  32. next     1.7;
  33.  
  34. 1.7
  35. date     90.05.14.14.47.06;  author jhh;  state Exp;
  36. branches ;
  37. next     1.6;
  38.  
  39. 1.6
  40. date     89.08.07.17.48.22;  author mendel;  state Exp;
  41. branches ;
  42. next     1.5;
  43.  
  44. 1.5
  45. date     88.08.01.15.01.14;  author mendel;  state Exp;
  46. branches ;
  47. next     1.4;
  48.  
  49. 1.4
  50. date     88.07.25.20.25.20;  author mendel;  state Exp;
  51. branches ;
  52. next     1.3;
  53.  
  54. 1.3
  55. date     88.07.20.19.49.49;  author mendel;  state Exp;
  56. branches ;
  57. next     1.2;
  58.  
  59. 1.2
  60. date     88.06.21.13.09.28;  author ouster;  state Exp;
  61. branches ;
  62. next     1.1;
  63.  
  64. 1.1
  65. date     88.06.21.13.04.39;  author ouster;  state Exp;
  66. branches ;
  67. next     ;
  68.  
  69. 1.10.1.1
  70. date     91.10.21.22.08.00;  author kupfer;  state Exp;
  71. branches ;
  72. next     ;
  73.  
  74.  
  75. desc
  76. @@
  77.  
  78.  
  79. 1.12
  80. log
  81. @added fddi, conversion to new net module
  82. @
  83. text
  84. @/*
  85.  * net.h --
  86.  *
  87.  *    Declarations of the network library code.
  88.  *
  89.  * Copyright 1987 Regents of the University of California
  90.  * Permission to use, copy, modify, and distribute this
  91.  * software and its documentation for any purpose and without
  92.  * fee is hereby granted, provided that the above copyright
  93.  * notice appear in all copies.  The University of California
  94.  * makes no representations about the suitability of this
  95.  * software for any purpose.  It is provided "as is" without
  96.  * express or implied warranty.
  97.  *
  98.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.11 92/01/10 14:29:42 voelker Exp Locker: jhh $ SPRITE (Berkeley)
  99.  */
  100.  
  101. #ifndef _NET_USER
  102. #define _NET_USER
  103.  
  104. #include "machparam.h"
  105. #include "netEther.h"
  106. #include "netInet.h"
  107. #include "netUltra.h"
  108. #include "netFDDI.h"
  109. #include "sprite.h"
  110.  
  111. /*
  112.  * Types of addresses.
  113.  */
  114.  
  115. typedef int Net_AddressType;
  116.  
  117. #define NET_ADDRESS_NONE    ((Net_AddressType) 0)    /* Invalid */
  118. #define NET_ADDRESS_ETHER    ((Net_AddressType) 1)    /* Ethernet. */
  119. #define NET_ADDRESS_ULTRA    ((Net_AddressType) 2)    /* UltraNet. */
  120. #define NET_ADDRESS_FDDI    ((Net_AddressType) 3)    /* FDDI. */
  121. #define NET_ADDRESS_INET    ((Net_AddressType) 4)    /* IP. */
  122.  
  123.  
  124.  
  125. /*
  126.  * A network address.  The "generic" field must be at least as large as
  127.  * any of the other fields.
  128.  */
  129.  
  130. typedef struct Net_Address {
  131.     Net_AddressType        type;
  132.     union {
  133.     Net_EtherAddress    ether;
  134.     Net_UltraAddress    ultra;
  135.     Net_FDDIAddress        fddi;
  136.     Net_InetAddress        inet;
  137.     } address;
  138. } Net_Address;
  139.  
  140. /*
  141.  * Maximum number of network protocols.  Right now we support two,
  142.  * raw (ethernet for example) and inet
  143.  */
  144.  
  145. #define NET_MAX_PROTOCOLS 2
  146.  
  147. /*
  148.  * The different protocols.
  149.  */
  150.  
  151. #define NET_PROTO_RAW    0
  152. #define NET_PROTO_INET    1
  153.  
  154.  
  155. /* 
  156.  * This is the version number stored in the route.  Set this before
  157.  * installing a route and check it when looking at one.
  158.  */
  159. #define NET_ROUTE_VERSION 0x70500
  160.  
  161. /*
  162.  * Number of different types of networks. 
  163.  */
  164.  
  165. #define NET_NUM_NETWORK_TYPES 3
  166.  
  167. /*
  168.  * Type of network.  See below.
  169.  */
  170.  
  171. typedef int Net_NetworkType;
  172.  
  173. /*
  174.  * Types of network (values for Net_NetworkType).
  175.  */
  176.  
  177. #define NET_NETWORK_ETHER    ((Net_NetworkType) 0)    /* Ethernet. */
  178. #define NET_NETWORK_ULTRA    ((Net_NetworkType) 1)    /* Ultranet. */
  179. #define NET_NETWORK_FDDI        ((Net_NetworkType) 2)    /* FDDI. */
  180.  
  181. /*
  182.  * This structure defines the packet headers.
  183.  */
  184. typedef union Net_Header {
  185.     Net_EtherHdr    etherHdr;    /* Raw ethernet packet. */
  186.     struct {                /* An IP packet on the ethernet. */
  187.     Net_EtherHdr    etherHdr;
  188.     Net_IPHeader    ipHdr;
  189.     } inetHdr;        
  190. } Net_Header;
  191.  
  192. /*
  193.  * The user-level view of a route. This structure is used to both install
  194.  * routes and to get their contents.  The fields are marked 'in' if they
  195.  * must be set to install a route, and 'out' if they are set when 
  196.  * getting a route's contents.
  197.  */
  198.  
  199. typedef struct Net_UserRoute {
  200.     int            version;    /* Version number. (in/out)*/
  201.     int            spriteID;    /* Sprite ID of route target. (in/out)*/
  202.     Net_Address        interAddress;    /* Address of interface for route. 
  203.                      * (in/out) */
  204.     int            protocol;    /* Route protocol. (in/out) */
  205.     int            flags;        /* Flags. See below. (in/out) */
  206.     int            refCount;    /* Number of references to route. 
  207.                      * (out). */
  208.     int            routeID;    /* Unique route ID. (out)*/
  209.     int            minPacket;    /* Minimum packet size for route. 
  210.                      * This does not include any headers.
  211.                      * (out) */
  212.     int            maxPacket;    /* Maximum packet size for route. 
  213.                      * This does not include any headers.
  214.                      * (out) */
  215.     int            minRpc;        /* Minimum RPC to send over route.
  216.                      * (in/out) */
  217.     int            maxRpc;        /* Maximum RPC to send over route.
  218.                      * (in/out) */
  219.     Net_NetworkType    netType;    /* Type of network. See above. (out) */
  220.     Net_Address        netAddress[NET_MAX_PROTOCOLS];    /* Address of target
  221.                              * for each protocol.
  222.                                (in/out) */
  223.     char        desc[64];    /* Route description for debugging.
  224.                      * (out) */
  225.     char        hostname[20];    /* Host name. (in/out) */
  226.     char        machType[12];    /* Host machine type. (in/out) */
  227.     ClientData        userData;    /* Data that is uninterpreted by 
  228.                      * kernel. (in/out) */
  229. } Net_UserRoute;
  230.  
  231. #ifndef KERNEL
  232. typedef Net_UserRoute Net_Route;    /* User's see this structure as a
  233.                      * Net_Route. */
  234. #endif
  235.  
  236. #ifdef KERNEL
  237. /*
  238.  * These are the backwards compatible versions of Net_RouteInfo. 
  239.  * and Net_Address. Don't use this in new programs. These definitions
  240.  * can be removed once they are no longer used by the kernel.
  241.  */
  242. typedef union Net_AddressOld {
  243.     Net_EtherAddress        ether;
  244.     Net_InetAddress        inet;
  245.     Net_UltraAddress        ultra;
  246.     Net_FDDIAddress        fddi;
  247.     struct { char data[8]; }     generic;
  248. } Net_AddressOld;
  249.  
  250. typedef struct Net_RouteInfoOld {
  251.     int            version;    /* Version number. (in/out)*/
  252.     int            spriteID;    /* Sprite ID of route target. (in/out)*/
  253.     int            interface;    /* The interface number to use. 
  254.                      * (in/out) */
  255.     int            protocol;    /* Route protocol. (in/out) */
  256.     int            flags;        /* Flags. See below. (in/out) */
  257.     int            refCount;    /* Number of references to route. 
  258.                      * (out). */
  259.     int            routeID;    /* Unique route ID. (in/out)*/
  260.     int            maxBytes;    /* Maximum transfer unit for route. 
  261.                      * This does not include any headers.
  262.                      * (out) */
  263.     int            minBytes;    /* Minimum transfer unit for route. 
  264.                      * This does not include any headers.
  265.                      * (out) */
  266.     Net_NetworkType    netType;    /* Type of network. See above. (out) */
  267.     Net_AddressOld    netAddress[NET_MAX_PROTOCOLS];    /* Address of target
  268.                              * for each protocol.
  269.                                (in/out) */
  270.     char        desc[64];    /* Route description for debugging.
  271.                      * (out) */
  272.     char        hostname[20];    /* Host name. (in/out) */
  273.     char        machType[12];    /* Host machine type. (in/out) */
  274.     ClientData        userData;    /* Data that is uninterpreted by 
  275.                      * kernel. (in/out) */
  276.     Net_Header        header;        /* The packet header. (out) */
  277. } Net_RouteInfoOld;
  278.  
  279. #endif
  280. /*
  281.  * Define the flags field.
  282.  */
  283.  
  284. #define NET_FLAGS_VALID 0x1
  285.  
  286. /*
  287.  * Define the special Sprite ID used for broadcasting.
  288.  */
  289. #define        NET_BROADCAST_HOSTID    0
  290.  
  291.  
  292. /* 
  293.  * If we're building a kernel, don't include this declaration.  It 
  294.  * clashes with the declaration for the real kernel routine.
  295.  */
  296.  
  297. #ifndef KERNEL
  298.  
  299. extern ReturnStatus Net_InstallRoute _ARGS_((int spriteID, int flags,
  300.                          int type, ClientData clientData,
  301.                          char *hostname, char
  302.                          *machType));
  303.  
  304. #endif /* KERNEL */
  305.  
  306.  
  307. /*
  308.  * Declarations for -lnet library.
  309.  */
  310.  
  311. extern Net_InetAddress    Net_StringToInetAddr _ARGS_((char *cp));
  312. extern ReturnStatus    Net_StringToAddr _ARGS_((char *buffer, 
  313.                 Net_AddressType type, Net_Address *addressPtr));
  314. extern char        *Net_InetAddrToString _ARGS_((Net_InetAddress address,
  315.                               char *buffer));
  316. extern char        *Net_AddrToString _ARGS_((Net_Address *netAddressPtr,
  317.                         char *buffer));
  318. extern unsigned int    Net_StringToNetNum _ARGS_((char *cp));
  319. extern unsigned int    Net_InetAddrHostNum _ARGS_((Net_InetAddress inetAddr));
  320. extern unsigned int    Net_InetAddrNetNum _ARGS_((Net_InetAddress addr));
  321. extern unsigned int    Net_InetAddrNetMask _ARGS_((Net_InetAddress addr));
  322. extern Net_InetAddress    Net_MakeInetAddr _ARGS_((unsigned int net,
  323.                          unsigned int host));
  324. extern char        *Net_EtherAddrToString _ARGS_((
  325.                 Net_EtherAddress *etherAddrPtr,
  326.                 char buffer[18]));
  327. extern void        Net_StringToEtherAddr _ARGS_((char *buffer,
  328.                        Net_EtherAddress *etherAddressPtr));
  329. extern     char        *Net_UltraAddrToString _ARGS_((
  330.                 Net_UltraAddress *ultraAddrPtr, char *buffer));
  331. extern void        Net_StringToUltraAddr _ARGS_((char *buffer,
  332.                        Net_UltraAddress *ultraAddressPtr));
  333. extern     char        *Net_FDDIAddrToString _ARGS_((
  334.                 Net_FDDIAddress *fddiAddrPtr, char *buffer));
  335. extern void        Net_StringToFDDIAddr _ARGS_((char *buffer,
  336.                        Net_FDDIAddress *fddiAddressPtr));
  337. extern unsigned short    Net_InetChecksum _ARGS_((int len, Address bufPtr));
  338. extern unsigned short    Net_InetChecksum2 _ARGS_((int len, Address bufPtr,
  339.                            Net_IPPseudoHdr *pseudoHdrPtr));
  340. extern int        Net_AddrCmp _ARGS_((Net_Address *aPtr, 
  341.                 Net_Address *bPtr));
  342. extern ReturnStatus    Net_SetAddress _ARGS_((Net_AddressType type,
  343.                 Address specificPtr, Net_Address *addrPtr));
  344. extern ReturnStatus    Net_GetAddress _ARGS_((Net_Address *addrPtr, 
  345.                 Address specificPtr));
  346.  
  347. #if BYTE_ORDER == LITTLE_ENDIAN
  348. extern unsigned int    Net_NetToHostInt _ARGS_((unsigned int longInt));
  349. extern unsigned int    Net_HostToNetInt _ARGS_((unsigned int longInt));
  350.  
  351. extern unsigned short    Net_NetToHostShort _ARGS_((unsigned short shortInt));
  352. extern unsigned short    Net_HostToNetShort _ARGS_((unsigned short shortInt));
  353. #else 
  354. #define Net_NetToHostInt(arg)    (arg)
  355. #define Net_HostToNetInt(arg)    (arg)
  356.  
  357. #define Net_NetToHostShort(arg)    (arg)
  358. #define Net_HostToNetShort(arg)    (arg)
  359. #endif
  360.  
  361. #endif _NET_USER
  362. @
  363.  
  364.  
  365. 1.11
  366. log
  367. @unlocking net.h
  368. @
  369. text
  370. @d15 1
  371. a15 1
  372.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.10 90/10/19 15:50:56 jhh Exp Locker: voelker $ SPRITE (Berkeley)
  373. d29 14
  374. d46 9
  375. a54 6
  376. typedef union Net_Address {
  377.     Net_EtherAddress        ether;
  378.     Net_InetAddress        inet;
  379.     Net_UltraAddress        ultra;
  380.     Net_FDDIAddress             fddi;
  381.     struct { char data[8]; }     generic;
  382. a57 6
  383.  * Macro to compare two Net_Address objects.
  384.  */
  385. #define NET_ADDRESS_COMPARE(a,b) \
  386.     (bcmp((char *) &(a), (char *) &(b), sizeof(Net_Address)))
  387.  
  388. /*
  389. d82 1
  390. a82 1
  391. #define NET_NUM_NETWORK_TYPES 2
  392. d116 52
  393. a167 1
  394. typedef struct Net_RouteInfo {
  395. d184 1
  396. a184 1
  397.     Net_Address        netAddress[NET_MAX_PROTOCOLS];    /* Address of target
  398. d194 1
  399. a194 1
  400. } Net_RouteInfo;
  401. d196 1
  402. a196 1
  403.  
  404. a222 30
  405. /* 
  406.  * The structures defined below here are obsolete and should not be used
  407.  * in new programs.
  408.  */
  409.  
  410. /*
  411.  * A Generic network address...
  412.  */
  413. typedef struct {
  414.     char    data[14];
  415. } Net_GenericAddress;
  416.  
  417. /*
  418.  * Definition of user visible Route structure that is returned
  419.  * via the Test_Stats system call with the NET_GET_ROUTE command.
  420.  */
  421. typedef struct Net_SpriteRoute {
  422.     int        flags;        /* Flags defined in kernel/net.h */
  423.     int        spriteID;    /* Universal Sprite Host ID */
  424.     int        type;        /* Types defined in kernel/net.h */
  425.     union {
  426.     Net_EtherHdr    etherHdr;    /* type == NET_ROUTE_ETHER */
  427.     char        data[14];    /* type == NET_ROUTE_GENERIC */
  428.     struct {
  429.         Net_EtherHdr    etherHdr;
  430.         Net_IPHeader    ipHdr;
  431.     } inetHdr;            /* type == NET_ROUTE_INET */
  432.     } route;
  433. } Net_SpriteRoute;
  434.  
  435. d229 2
  436. a230 3
  437. extern ReturnStatus    Net_StringToAddr _ARGS_((char *buffer, int protocol,
  438.                          Net_NetworkType netType,
  439.                          Net_Address *addressPtr));
  440. d234 1
  441. a234 3
  442.                           int protocol,
  443.                           Net_NetworkType netType,
  444.                           char *buffer));
  445. d241 4
  446. a244 3
  447. extern char    *Net_EtherAddrToString _ARGS_((Net_EtherAddress *etherAddrPtr,
  448.                            char buffer[18]));
  449. extern void    Net_StringToEtherAddr _ARGS_((char *buffer,
  450. d246 8
  451. d257 6
  452. a276 1
  453.  
  454. @
  455.  
  456.  
  457. 1.10
  458. log
  459. @changed the format of the route information
  460. @
  461. text
  462. @d15 1
  463. a15 1
  464.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.9 90/09/11 14:40:13 kupfer Exp Locker: jhh $ SPRITE (Berkeley)
  465. d25 1
  466. d36 1
  467. d85 1
  468. @
  469.  
  470.  
  471. 1.10.1.1
  472. log
  473. @Initial branch for Sprite server.
  474. @
  475. text
  476. @d15 1
  477. a15 1
  478.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.10 90/10/19 15:50:56 jhh Exp $ SPRITE (Berkeley)
  479. @
  480.  
  481.  
  482. 1.9
  483. log
  484. @Use function prototypes.
  485. @
  486. text
  487. @d15 1
  488. a15 1
  489.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.8 90/06/21 12:48:49 jhh Exp Locker: kupfer $ SPRITE (Berkeley)
  490. d122 6
  491. a127 3
  492.     char        name[100];    /* Name of route (for debugging). */
  493.     char        hostname[100];    /* Host name. (in/out) */
  494.     char        machType[100];    /* Host machine type. (in/out) */
  495. @
  496.  
  497.  
  498. 1.8
  499. log
  500. @initial ultra support
  501. @
  502. text
  503. @d15 1
  504. a15 1
  505.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.7 90/05/14 14:47:06 jhh Exp $ SPRITE (Berkeley)
  506. d141 13
  507. a153 1
  508. extern ReturnStatus Net_InstallRoute();
  509. d187 1
  510. a187 1
  511.  * Declarations for library routines in net.c.
  512. d190 23
  513. a212 12
  514. extern Net_InetAddress    Net_StringToInetAddr();
  515. extern ReturnStatus    Net_StringToAddr();
  516. extern char         *Net_InetAddrToString();
  517. extern unsigned int    Net_StringToNetNum();
  518. extern unsigned int    Net_InetAddrHostNum();
  519. extern unsigned int    Net_InetAddrNetNum();
  520. extern unsigned int    Net_InetAddrNetMask();
  521. extern Net_InetAddress    Net_MakeInetAddr();
  522. extern char         *Net_EtherAddrToString();
  523. extern void        Net_StringToEtherAddr();
  524. extern unsigned short    Net_InetChecksum();
  525. extern unsigned short    Net_InetChecksum2();
  526. d215 2
  527. a216 2
  528. extern unsigned int Net_NetToHostInt();
  529. extern unsigned int Net_HostToNetInt();
  530. d218 2
  531. a219 2
  532. extern unsigned short Net_NetToHostShort();
  533. extern unsigned short Net_HostToNetShort();
  534. @
  535.  
  536.  
  537. 1.7
  538. log
  539. @added support for multiple network interfaces
  540. @
  541. text
  542. @d15 1
  543. a15 1
  544.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.6 89/08/07 17:48:22 mendel Exp Locker: jhh $ SPRITE (Berkeley)
  545. d24 2
  546. d34 1
  547. d66 1
  548. a66 1
  549.  * Number of different types of networks.  Just ethernet for now.
  550. d69 1
  551. a69 1
  552. #define NET_NUM_NETWORK_TYPES 1
  553. d81 2
  554. a82 1
  555. #define NET_NETWORK_ETHER    ((Net_NetworkType) 1)    /* Ethernet. */
  556. a104 1
  557.     int            serial;        /* Route serial number. (in/out)*/
  558. d111 2
  559. a112 1
  560.     int            MTU;        /* Maximum transfer unit for route.
  561. d115 3
  562. d122 1
  563. d179 1
  564. @
  565.  
  566.  
  567. 1.6
  568. log
  569. @Added NET_ROUTE_INET route.
  570. @
  571. text
  572. @d15 1
  573. a15 1
  574.  * $Header: /sprite/src/lib/include/RCS/net.h,v 1.5 88/08/01 15:01:14 mendel Exp Locker: mendel $ SPRITE (Berkeley)
  575. d24 115
  576. @
  577.  
  578.  
  579. 1.5
  580. log
  581. @Modified to use the new BYTE_ORDER conventions.
  582. @
  583. text
  584. @d15 1
  585. a15 1
  586.  * $Header: net.h,v 1.3 88/07/20 19:49:49 mendel Exp $ SPRITE (Berkeley)
  587. d43 4
  588. @
  589.  
  590.  
  591. 1.4
  592. log
  593. @Modified Net_StringToEtherAddr to reflect its new implentation.
  594. @
  595. text
  596. @d18 2
  597. a19 2
  598. #ifndef _NET
  599. #define _NET
  600. d21 1
  601. d63 1
  602. a63 1
  603. #ifdef LITTLE_ENDIAN
  604. d67 2
  605. a68 2
  606. extern unsigned int Net_NetToHostShort();
  607. extern unsigned int Net_HostToNetShort();
  608. d78 1
  609. a78 1
  610. #endif _NET
  611. @
  612.  
  613.  
  614. 1.3
  615. log
  616. @Added declartions for LITTLE_ENDIAN machines byte swapping.
  617. @
  618. text
  619. @d15 1
  620. a15 1
  621.  * $Header: net.h,v 1.2 88/06/21 13:09:28 ouster Exp $ SPRITE (Berkeley)
  622. d58 1
  623. a58 1
  624. extern Net_EtherAddress    Net_StringToEtherAddr();
  625. @
  626.  
  627.  
  628. 1.2
  629. log
  630. @*** empty log message ***
  631. @
  632. text
  633. @d15 1
  634. a15 1
  635.  * $Header: net.h,v 1.1 88/06/21 13:04:39 ouster Exp $ SPRITE (Berkeley)
  636. d62 7
  637. d74 2
  638. @
  639.  
  640.  
  641. 1.1
  642. log
  643. @Initial revision
  644. @
  645. text
  646. @d7 7
  647. a13 1
  648.  * All rights reserved.
  649. d15 1
  650. a15 2
  651.  *
  652.  * $Header: net.h,v 2.1 87/09/30 21:31:04 deboor Exp $ SPRITE (Berkeley)
  653. @
  654.